
import {
	getStorageToken
} from './storageUtils';

const network = require('../config/net.config')


// 请求拦截器
export function initRequestInterceptor() {

	uni.addInterceptor('request', {
		invoke(args) {
			// 1.判断接口是否需要登陆 用户未登陆
			if (!hasPermission(args.url.split('?')[0])) {
				// 需要登陆 跳转登陆页面
				uni.redirectTo({
					url: '/pages/login/login'
				});
				return false;
			}
			// 2.用户已经登陆
			// 2.1 设置token
			args.header.accessToken = getStorageToken()
			// 2.3 request 触发前拼接 url  
			args.url = network.baseURL + "/" + args.url
			return true;

		},
		success(args) {
			// 请求成功后，修改code值为1
			if (args.statusCode != 200) {
				uni.showToast({
					title: '服务太忙了,请稍后再试',
					position: 'top'
				});
				console.error("请求发生错误 \n status:" + args.data.status + "\n path:" + args.data.path +
					"\n error:" + args.data.error)
				return false;
			}
			return true;

		},
		fail(err) {
			uni.showToast({
				title: '网络连接失败.',
				position: 'top'
			});
			console.error("请求发生错误 \n status:" + args.data.status + "\n path:" + args.data.path + "\n error:" +
				args.data.error)
			return false;
		},
		complete(res) {}
	})
}

function hasPermission(url) {
	// 在白名单中或有token，直接放行
	const whiteApi = network.whiteApis.find(whiteApi => {
		if (whiteApi == url) {
			return whiteApi;
		}
	})
	if (whiteApi != null || getStorageToken()) {
		return true
	}
	uni.showToast({
		title: '请先登录',
		position: 'top'
	})
	return false
}
